package basicservicelogic

import (
	"context"
	"fmt"
	"property_service/dao/model"

	"property_service/dao/query"
	"property_service/internal/svc"
	"property_service/property_service"
	"property_service/utils/result"

	"github.com/zeromicro/go-zero/core/logx"
)

type StatusAuthorizationAddLogic struct {
	ctx    context.Context
	svcCtx *svc.ServiceContext
	logx.Logger
}

func NewStatusAuthorizationAddLogic(ctx context.Context, svcCtx *svc.ServiceContext) *StatusAuthorizationAddLogic {
	return &StatusAuthorizationAddLogic{
		ctx:    ctx,
		svcCtx: svcCtx,
		Logger: logx.WithContext(ctx),
	}
}

// StatusAuthorizationAdd 创建状态审核授权表项
func (l *StatusAuthorizationAddLogic) StatusAuthorizationAdd(in *property_service.StatusAuthorization) (*property_service.Response, error) {
	// 获取状态审核授权表模型的查询构造器
	m := query.Use(l.svcCtx.Gorm).StatusAuthorization

	//判断指定用户是否已经添加过数据,已存在该数据
	DB := l.svcCtx.Gorm
	count := 0
	//通过  status_group , status_code,user_ID来判断值是否已添加
	DB.Raw("SELECT COUNT(*) FROM status_authorization WHERE status_code = ?  AND  status_group  = ?  AND tenant_id = ?  AND user_ID = ?", in.StatusCode, in.StatusGroup, in.TenantID, in.UserID).Scan(&count)
	fmt.Println("count", count)
	//如果没有该数据
	if count == 0 {
		// 创建一个新的状态审核授权表模型对象，不包含ID、TenantID、CreatedAt、UpdatedAt字段
		mod := &model.StatusAuthorization{
			StatusCode:          in.StatusCode,          // 状态代码
			StatusName:          in.StatusName,          // 状态名称
			StatusDispositionID: in.StatusDispositionID, // 状态id
			UserName:            in.UserName,            // 用户名
			NickName:            in.NickName,            // 昵称
			UserID:              in.UserID,              // 用户id
			StatusGroup:         in.StatusGroup,         // 状态分组
			StatusGroupName:     in.StatusGroupName,     // 状态分组名称
			Status:              in.Status,              // 状态
			Description:         in.Description,         // 说明
			TenantID:            in.TenantID,            // 租户ID
			CreatedAtuser:       in.CreatedAtuser,       // 创建人
			UpdatedAtuser:       in.UpdatedAtuser,       // 更新人
		}
		// 使用上下文执行创建操作
		if err := m.WithContext(l.ctx).Create(mod); err != nil {
			// 如果创建失败，返回错误响应
			return result.Err(err).Ed()
		}
		// 创建成功，返回成功响应
		return result.Suc().AddEd()
	} else {
		return &property_service.Response{
			Code:    200,
			Message: "已添加该数据",
			Data:    nil,
		}, nil
	}
	// 创建成功，返回成功响应
	return result.Suc().AddEd()
}
